# 字典：键-值（key-value）的方式存在的
# 多次对一个 key 赋 value，后面的 value 会把前面的 value 覆盖。
# dict 中的值可以是任意 Python 对象
# 1.2 使用
# 字典的内容在花括号 {} 内，键-值（key-value）之间用冒号 : 分隔，
# 键值对之间用逗号 , 分隔，比如创建字典 d，如下所示：
# 方式一：使用花括号 {}
d = {"name": "Tom", "age": 18, "gender": "male"}
# # 使用 dict 函数#
# 方式二：使用 dict 函数
l = [('name', 'Tom'), ('age', 18), ('gender', 'male')]
print(type(l))
print(type(l[0]))

d = dict(l)
print(type(d))

# # 空字典
# d = dict()
# d = {}

# 字典中的值通过 key 进行访问
# 通过 key 访问字典中的值
print(d['name'])
print(d['age'])
print(d['gender'])
a = {True: True, 2: "hehe"}
a[True] = False
print(a[True])

# 清空集合，如下所示
# a.clear()
# 获取字典的长度，如下所示
print(len(a))

ll = {
    "name": "Tom",  # 键-值对
    "age": 18,
    "gender": "male",  # 键重复的话，会覆盖这个值
    # "name": "Jerry"
}
# print(ll['name'])

print(type(ll))
# ll = {}

# 新增键-值对
ls = (1, 4, "aa")
str = 'fff'  # 或"fff"或"""ffjfjfjfjjf"""
ll['scope'] = {'C': 99, 'java': 20, 'python': 30}
print('%' * 10)
print(type(ll['scope']))
print(ll)

# 修改键-值对
ll['scope']['C'] = 100

print(ll)

# in
print('C' in ll['scope'])
print(ll['scope']['C'])
# 字典的遍历
for i in d:
    print(i, d[i])
# items方法的作用是遍历字典中的键值对
for k, v in d.items():
    print(k, v)
print(d.items())
for k in d.keys():
    print(k)
for v in d.values():
    print(v)
# 字典常用的方法
# pop()方法的作用是删除字典中指定的键，并返回被删除的值
d.pop('name')
print(d)
# copy()方法的作用是返回字典的浅拷贝
a = d.copy()
print(a)
print(a.get('age'))
# popitem()方法的作用是删除字典中最后一个键值对，并返回被删除的键值对
j = d.popitem()
d.popitem()
print(j)
print(d)
# update()方法的作用是更新字典，将参数中的键值对添加到字典中
d.update({'name': 'Tom', 'age': 18, 'gender': 'male'})
print(d)
d.update({'name': 'Lucy'})
print(d)
# clear()方法的作用是清空字典
d.clear()
print(d)
